package com.qf.mybatis01.dao;

import com.qf.mybatis01.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface UserDao {

    /**
     * 根据用户的id查询用户
     * @param id
     * @return
     */
    public User selectUserById(Integer id);

    /**
     * 根据id和密码查询用户
     * @param id
     * @param pwd
     * @return
     */
    public User selectUserByIdAndPwd(Integer id,String pwd);

    /**
     * 根据用户名和密码查询用户
     * @param name
     * @param pwd
     * @return
     */
    public User selectUserByNameAndPwd(@Param("username") String name,@Param("password") String pwd);


    /**
     * 参数为map的根据用户名和密码查询用户
     * 注意,map中的key,要与Mapper配置文件中的 #{} 中的内容一致
     * @param map
     * @return
     */
    public User selectUserByNameAndPwd_Map(Map map);


    /**
     * 参数为user对象的根据用户名和密码查询用户
     * @param user
     * @return
     */
    public User selectUserByNameAndPwd_Obj(User user);


    /**
     * 根据传入的用户名的关键字进行模糊查询,sql如下
     *
     * @param keyword
     * @return
     */
    public List<User> selectUserByName(@Param("keyword") String keyword);


    /**
     * 根据用户的id删除用户
     * @param id
     * @return
     */
    public int deleteUserById(@Param("id") Integer id);

    /**
     * 修改用户信息
     * 修改的依据是user对象中的id值
     *
     * @param user
     * @return
     */
    public int updateUserById(User user);


    /**
     * 新增一个用户
     * @param user
     * @return
     */
    public int insertUser(User user);


    /**
     * 查询status=0的所有用户信息
     * @return
     */
    public List<User> selectUserByStatus();


    /**
     * 跟新用户的status字段，更新为1
     * @param id
     * @return
     */
    public int updateUserStatus(@Param("id") Integer id);

    /**
     * 更新用户表的status字段，把字段值设置为0
     * @return
     */
    public int updateUserStatusSetValueZero();

}
